import java.util.concurrent.locks.LockSupport;

/**
 * @description:
 * @title: GcDemo
 * @author: zp
 * @date: 2021/8/11 21:33
 * 四大垃圾回收算法
 * 1、程序计数
 * 2、复制算法
 * 3、标记清除
 * 4、标记整理
 * STW：STOP THE WORLD
 * JVM 的四种垃圾回收器
 * Serial 串行垃圾回收 暂停所有的用户线程 完成垃圾回收 不适应服务器程序
 * Parallel 并行垃圾回收器 多个垃圾回收器并行回收 用户线程也是暂停的 适用于大数据和科学研究（弱交互场景）
 * CMS 并发标记清除 用户线程和GC线程同时执行（不一定是并行 也可能是交替运行） 不需要停止用户线程 适用于互联网公司 高并发的场景下
 * G1 垃圾回收器 将堆内存分割成不同的区域 然后并发对其进行垃圾回收
 * java 11 以后出现 ZGC
 * <p>
 * 新生代：
 * 1、SerialCopying
 * 2、ParallelScavenge
 * 3、ParNew
 * 4、G1
 * 老年代
 * 1、SerialMSC（Serial Old）
 * 2、ParallelCompacting（Parallel Old）
 * 3、CMS
 * 4、G1
 * 1、年轻代、老年代是独立且连续的内存块；
 * 2、年轻代收集使用单eden、双survivor进行复制算法
 * 3、老年代收集必须扫描整个老年代区域；
 * 4、都是以尽可能少而块地执行GC为设计原则。
 * 配置分区大小：启动时可以通过参数-XX:G1HeapRegionSize=n可指定分区大小(1MB~32MB，且必须是2的幂)，默认将整堆划分为2048个分区。
 * <p>
 * -XX:+UseParallelGC
 * PSYoungGen 新生代 并行GC
 * ParOldGen 老年代 并行GC
 * <p>
 * -XX:+UseSerialGC
 * new generation：新生代 复制算法 串行GC
 * tenured generation 老年代 标记整理算法 串行GC
 * <p>
 * -XX:+UseParNewGC (这个组合不推荐使用)
 * par new generation 新生代 复制算法 并行GC
 * tenured generation 老年代 标记整理算法 串行GC
 * <p>
 * 项目启动调优公式
 * java -server jvm的各种参数 -jar/war 启动文件
 * <p>
 * springboot web容器 推荐使用 Undertow
 */
public class GcDemo {

}
